import axios from "axios";
import { Message } from 'element-ui';
import { getToken, removeToken } from '@/utils/cookie.js'
import { MessageBox } from 'element-ui';
import router from "@/router";
// console.log(process.env)
const instance = axios.create({
    // 相对路径，作为浏览器的前缀自动拼接上（ http://localhost:8080）
    baseURL: process.env.VUE_APP_BASE_URL,
    timeout: 3000,
})
// 请求拦截器
instance.interceptors.request.use(config => {
    // console.log(config) //请求的对象
    //  判断哪些接口需要携带参数
    const { isToken = true } = config
    if(isToken){
        // 需要携带token,请求头携带token字段名，后端设置，需要到接口文档去拿
        // 携带的token格式需要问清楚以什么格式传递， 1.直接携带token值 2.Bearer+token值
        config.headers['Authorization'] = `Bearer ${getToken()}`
    }
//   重新发请求
 return config

})
// 响应拦截器 对获取到的响应数据进行处理
instance.interceptors.response.use(res => {
    // 响应成功之后做的处理
    const { data } = res
    //  统一处理错误逻辑
    if (data.code !== 200) {
        if (data.code === 401) {
            // token失效，没有权限
            handleTokenExpired()
            return Promise.reject('登录状态已过期')
        }
        // 错误的提示
        Message.error(data.msg)
        //  返回失败的状态
        return Promise.reject(data.msg)
    }
    // 拆包
    return res.data
}, err => {
    //    响应错误之后做处理
    // 错误的提示
    Message.error(err.msg)
    //  返回失败的状态
    return Promise.reject(err.response)
})

// token过期处理
function handleTokenExpired() {
    // 移除token
    removeToken()
    //  消息提示
    MessageBox.confirm('您的登录状态已经过期，请重新登录！', '提示', {
        confirmButtonText: '确定',
        type: 'warning'
    }).then(res => {
        // 点击确认跳转登录
        router.replace('/login')
    })
}
export default instance